package com.cskaoyan.javase.oop3._1interface._3exercise;

/**
 * @description: 小练习
 * @author: wuguidong@cskaoyan.onaliyun.com
 **/

/**
 * > 小试牛刀
 * > 请用所学知识分析：
 * > 这个案例中有哪些抽象类，哪些接口，哪些具体类。
 * - 教练（Coach）和运动员（Sportsman）案例
 *   - 乒乓球（TableTennis）运动员和篮球（basketball）运动员
 *   - 乒乓球教练和篮球教练
 *   - 为了出国交流，跟乒乓球相关的人员都需要学习英语
 *
 *  抽象类: 抽象的教练类,抽象的运动员类
 *  具体类: 篮球运动员和篮球教练,乒乓球运动员和乒乓球教练
 *  接口: 学习英语
 *
 * - 做一个高中学生管理系统，高一，高二，高三
 *   - 需要做一个抽象的学生类，具体类：高一学生
 *   - 并且要对学生信息进行增删改查，这就是接口里面的功能，crud工程师
 *
 * 接口的使用频率比抽象类高很多,很多人把基本开发者,称之为"写接口"的人
 *
 */
public class Demo {
    public static void main(String[] args) {
        ILearning i = new TableTennisSportsman();
        //((TableTennisSportsman) i).play();

        AbstractSportsman as = new TableTennisSportsman();
        as.play();
        //((TableTennisSportsman) as).learningEnglish();

    }
}

//抽象的教练类
abstract class AbstractCoach {
    //成员
    String name;
    int age;
    double salary;

    public abstract void teach();
}

//抽象的运动员类
abstract class AbstractSportsman {
    //成员
    String name;
    int age;
    double bonus;

    public abstract void play();
}

interface ILearning {
    void learningEnglish();
}

//定义具体类
//定义篮球教练
class BasketballCoach extends AbstractCoach {
    @Override
    public void teach() {
        System.out.println("我教你打篮球!");
    }
}

//定义乒乓球运动员
class TableTennisSportsman extends AbstractSportsman implements ILearning {

    @Override
    public void play() {
        System.out.println("我打乒乓球");
    }

    @Override
    public void learningEnglish() {
        System.out.println("我学英语");
    }
}